#include <stdio.h>

int main()
{
	printf("begin.\n");
	goto exit;
	printf("skip me!\n");

exit:
	printf("end\n");
}

#if 0

某些情况下还必须使用这种语句

goto直接编译成了JMP。这两个指令的效果完全相同：无条件的转移到程序中的另一个地方继续执行后续命令。

只有在人工干预的情况下，例如使用调试器调整程序、或者对程序打补丁的情况下，程序才会调用第二个printf。

/*
 * dead code
 */
	第二次printf的代码称为"无用代码/dead code"。无用代码永远不会被执行。
	启用编译优化，会删除得干干净净。


#endif

#if 0
/*
 * intel
 */
0000000000001149 <main>:
    1149:	f3 0f 1e fa          	endbr64 
    114d:	55                   	push   %rbp
    114e:	48 89 e5             	mov    %rsp,%rbp
    1151:	48 8d 3d ac 0e 00 00 	lea    0xeac(%rip),%rdi        # 2004 <_IO_stdin_used+0x4>
    1158:	e8 f3 fe ff ff       	callq  1050 <puts@plt>
    115d:	90                   	nop
    115e:	f3 0f 1e fa          	endbr64 
    1162:	48 8d 3d a2 0e 00 00 	lea    0xea2(%rip),%rdi        # 200b <_IO_stdin_used+0xb>
    1169:	e8 e2 fe ff ff       	callq  1050 <puts@plt>
    116e:	b8 00 00 00 00       	mov    $0x0,%eax
    1173:	5d                   	pop    %rbp
    1174:	c3                   	retq   
    1175:	66 2e 0f 1f 84 00 00 	nopw   %cs:0x0(%rax,%rax,1)
    117c:	00 00 00 
    117f:	90                   	nop

/*
 * arm
 */
000000000040055c <main>:
  40055c:	a9bf7bfd 	stp	x29, x30, [sp, #-16]!
  400560:	910003fd 	mov	x29, sp
  400564:	90000000 	adrp	x0, 400000 <_init-0x3e8>
  400568:	91190000 	add	x0, x0, #0x640
  40056c:	97ffffb9 	bl	400450 <puts@plt>
  400570:	d503201f 	nop
  400574:	90000000 	adrp	x0, 400000 <_init-0x3e8>
  400578:	91192000 	add	x0, x0, #0x648
  40057c:	97ffffb5 	bl	400450 <puts@plt>
  400580:	52800000 	mov	w0, #0x0                   	// #0
  400584:	a8c17bfd 	ldp	x29, x30, [sp], #16
  400588:	d65f03c0 	ret
  40058c:	00000000 	.inst	0x00000000 ; undefined


#endif

